package com.lhd._04mybatis.mapper;

import com.lhd._04mybatis.pojo.entity.Weibo;
import com.lhd._04mybatis.vo.*;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * @author lhd
 * @date 2024/4/18
 * @apiNote
 */
@Mapper
public interface WeiboMapper {
    /**
     * 1.微博中插入1条表记录
     * @param weibo 微博记录实体
     * @return 受影响的数据条数
     */
//    @Insert("INSERT INTO weibo(id,user_id,content,created)VALUES (#{id},#{userId},#{content},#{created})")
    int insertWeibo(Weibo weibo);


    /**
     * 2. 根据微博ID 删除指定的微博
     * @param wid 微博记录的id
     * @return 影响的条数
     */
//    @Delete("DELETE from weibo where id = #{wid}")
    int deleteWeibo(Long wid);

    /**
     * 3. 更新微博ID 更新指定的微博的信息
     * @param weibo 微博记录实体
     * @return
//     */
//    @Update("UPDATE weibo SET content = #{content},created = #{created},user_id = #{userId} where id = #{id}")
    int updateWeibo(Weibo weibo);


    /**
     *  4.查询：单条数据全字段查询
     *      根据微博ID查询该条微博的所有信息
     */
    // 注意：如果查询字段名和属性名不一致，则通过别名的方式解决user_id userId
//    @Select("SELECT id,content,created,user_id userId from weibo where id =#{wid}")
    Weibo selectWeibo(Long wid);


//    @Select("SELECT content,created from weibo where id =#{wid}")
    WeiboVO1 selectWeiboVO1ById(Long wid);


    /**
     * 6.查询：多条数据部分字段查询
     */
//    @Select("SELECT id wid ,content from weibo where user_id = #{userId}")
    List<WeiboVO2> selectWeiboVO2ByUserId(Long ueserId);

    /**
     * 7.动态删除1:数组方式
     *      根据微博ID删除指定的微博数据;
     *      Delete FROM weibo where id in (1,3,5);
     *      操作步骤:
     *      1.定义接口方法
     *      2.XML文件配置SQL
     *      3.测试方法
     */
    int deleteWeiboByIds1(Long[] ids);

    /**
     * 7.动态删除2:集合方式
     */
    int deleteWeiboByIds2(List<Long> ids);

    /**
     * 9.动态修改
     *      根据微博ID动态修改微博的相关信息
     */
    int dynamicUpdateWeibo(Weibo weibo);

    /**
     * 10.统计微博表中的表记录的数量
     *  SELECT COUNT(*) FROM weibo
     */
    int selectCount();

    /**
     * 11.ResultMap单表：根据微博ID查询该条微博的ID、内容content、用户ID
     */
    ResultMapVO1 selectMap1(Long wid);

    /**
     * 12.ResultMap多表：查询指定用户发的所有微博信息
     */
    ResultMapVO2 selectMap2(Long uid);

    /**
     * 13.查询微博表中的所有评论记录
     */
    ResultMapVO3 selectMap3(Long wid);

}
